package com.suning.sawp.intf.bi;

import java.util.List;
import java.util.Set;

import com.suning.sawp.dto.bi.BiStoreYbMonthDto;
import com.suning.sawp.dto.bi.sale.StoreCateMonthSaleDataDto;
import com.suning.sawp.dto.bi.sale.StoreCateMonthSaleDto;
import com.suning.sawp.dto.bi.sale.StoreMaxSaleBrandMDto;
import com.suning.sawp.dto.mainpush.ClerkMainPushSaleComplete;
import com.suning.sawp.dto.mainpush.GuideRankShowDto;
import com.suning.sawp.dto.mainpush.RankingListDto;
import com.suning.sawp.dto.mainpush.StoreCateSaleStatis;
import com.suning.sawp.dto.mainpush.StoreMonSaleDetailDto;
import com.suning.sawp.dto.mainpush.TaskCommStatistic;
import com.suning.sawp.po.bi.BIStaffPushTaskMonth;
import com.suning.sawp.po.bi.BIStaffSaleAllDay;
import com.suning.sawp.po.bi.BIStaffSaleAllMonth;
import com.suning.sawp.po.bi.BIStorePushTaskMonth;
import com.suning.sawp.po.bi.BIStoreSaleAllDay;
import com.suning.sawp.po.bi.BIStoreSaleAllMonth;
import com.suning.sawp.po.bi.BIStoreSaleCateDay;
import com.suning.sawp.po.bi.BIStoreSaleCateMonth;
import com.suning.sawp.po.bi.BiStoreCateBrandDay;
import com.suning.sawp.po.bi.BiStoreMonSaleTask;

/**
 * 
 * 销售额相关的BI数据处理<br> 
 * 〈功能详细描述〉
 * 涉及表BI_STORE_SALE_ALL_MONTH
 * @author 12061818
 * @see [相关类/方法]（可选）
 * @since [产品/模块版本] （可选）
 */
public interface BiSaleAmountDaoService {
    /**
     * 
     * 功能描述: 查询门店的当月销售额<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BIStoreSaleAllMonth queryStoreSaleAllMonthByStoreCode(String storeCode, String saleMonth);
    
    /**
     * 
     * 功能描述: 查询门店的当日销售额<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BIStoreSaleAllDay queryStoreSaleAllDayByStoreCode(String storeCode, String saleDate);
    
    /**
     * 
     * 功能描述: 查询门店主推BI统计数据<br>
     * 〈功能详细描述〉
     * 
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStorePushTaskMonth> queryStorePushItemsByStoreCode(String storeCode);
    
    /**
     * 
     * 功能描述: 查询任务下未分配的商品数量<br>
     * 〈功能详细描述〉
     *
     * @param taskNos
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<TaskCommStatistic> queryTaskCommNoAssigns(Set<Long> taskNos);
    
    /**
     * 
     * 功能描述: 查询门店督导所属品类的销售额<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param categoryCodes
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStoreSaleCateMonth> queryStoreCateSaleAmountMonth(String storeCode, 
            Set<String> categoryCodes, String saleMonth);
    
    /**
     * 
     * 功能描述: 查询门店督导所属品类的今日准实时销售<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param categoryCodes
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStoreSaleCateDay> queryStoreCateSaleAmountDay(String storeCode, 
            Set<String> categoryCodes, String saleDate);
    
    /**
     * 
     * 功能描述: 查询店员当月销售额<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BIStaffSaleAllMonth queryStaffSaleAllMonthByStaffId(String staffId);
    
    /**
     * 
     * 功能描述: 查询门店今日准实时销售额<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BIStaffSaleAllDay queryStaffSaleAllDayByStaffId(String staffId);
    
    /**
     * 
     * 功能描述: 查询大区内销售额排行<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStoreSaleAllMonth> querySaleSortStoreByRegCd(String regionCode, int limit);
    
    /***
     * 
     * 功能描述: 查询督导英雄榜<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<GuideRankShowDto> querySaleCateSortStoreByRegcd(
            String regionCode, String categoryCode, int limit);
    
    /**
     * 
     * 功能描述: 查询门店店员英雄榜<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStaffSaleAllMonth> queryStaffSaleByStoreCode(String storeCode, int limit);
    
    /**
     * 
     * 功能描述: 查询门店品类销售明细<br>
     * 〈功能详细描述〉
     *
     * @param categoryCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreCateSaleStatis> queryStoreCateSaleStatis(String categoryCode,
            String storeCode, int sort);
    
    /**
     * 
     * 功能描述: 查询门店品类日销售详情<br>
     * 〈功能详细描述〉
     *
     * @param categoryCode
     * @param storeCode
     * @param startIndex
     * @param limit
     * @param sort -1销售额倒序，0-不排序，1-正序
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreCateSaleStatis> queryStoreCateDaySale(String categoryCode, 
            String storeCode, int startIndex, int limit, int sort, String sortType);
    
    /**
     * 
     * 功能描述: 门店店长主推排行榜<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param taskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<RankingListDto> queryStoreMainPushRankingList(String regionCode, Long hqTaskNo);
    
    /**
     * 
     * 功能描述: 门店品类督导主推排行榜<br>
     * 〈功能详细描述〉
     *
     * @param regionCode
     * @param hqTaskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<GuideRankShowDto> queryStoreGuideMainPushRankingList(String regionCode, Long hqTaskNo);
    
    /**
     * 
     * 功能描述: 门店品类店员主推排行榜<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param hqTaskNo
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BIStaffPushTaskMonth> queryStoreStaffMainPushRankingList(String storeCode, Long hqTaskNo);
    /**
     * 
     * 功能描述: 店员任务期间总计完成情况<br>
     * 〈功能详细描述〉
     *
     * @param staffId
     * @param startDate
     * @param endDate
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<ClerkMainPushSaleComplete> queryClerkMainPushSaleCompletes(
            Long hqTaskNo, String storeCode, String startDate, String endDate, String goodsUniCode);
    
    /**
     * 
     * 功能描述: 店员任务期间日完成情况<br>
     * 〈功能详细描述〉
     *
     * @param hqTaskNo
     * @param storeCode
     * @param saleDate
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<ClerkMainPushSaleComplete> queryClerkMainPushSaleDayCompletes(
            Long hqTaskNo, String storeCode, String saleDate, String goodsUniCode);
    
    /**
     * 
     * 功能描述: 查询门店月度销售详情集合<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @param saleMonth
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreMonSaleDetailDto> queryStoreMonSaleDetails(String storeCode);
    
    /**
     * 
     * 功能描述: 查询最近的存在实际销售额的月份<br>
     * 〈功能详细描述〉
     *
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    String queryLatestSaleMonth(String storeCode);
    
    /**
     * 
     * 功能描述: 查询上个月实际销售情况<br>
     * 〈功能详细描述〉
     *
     * @param lastMonth
     * @param startIndex
     * @param limit
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<BiStoreMonSaleTask> queryLastMonStoreRealSale(String lastMonth, int startIndex, int limit);
    
    /**
     * 
     * 功能描述: 查询月份对应的任务销售额、毛利额、销售额<br>
     * 〈功能详细描述〉
     *
     * @param month 
     * @param cateCode 品类编码
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    StoreCateMonthSaleDto queryStoreCateMonthSale(String month, String cateCode, String storeCode);
    
    /**
     * 
     * 功能描述: 查询月份对应的任务销售额、毛利额、销售额<br>
     * 〈功能详细描述〉
     *
     * @param month
     * @param cateCode
     * @param storeCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    public StoreCateMonthSaleDataDto queryStoreCateMonthSaleData(String month, String cateCode, String storeCode);
    
    /**
     * 
     * 功能描述: 查询品类销售额最高的品牌(日维度)<br>
     * 〈功能详细描述〉
     *
     * @param saleDate
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    BiStoreCateBrandDay queryMaxStoreCateBrandDay(String saleDate, String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: <br>
     * 查询品类销售额最高的品牌(月维度)
     * 包含本期和去年同期数据
     * @param saleMonth
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    StoreMaxSaleBrandMDto queryMaxStoreCateBrandMonth(String saleMonth, String lastYearSaleMonth, 
            String storeCode, String cateCode);
    
    /**
     * 
     * 功能描述: 查询门店品类月度销售详情<br>
     * 〈功能详细描述〉
     *
     * @param year
     * @param storeCode
     * @param cateCode
     * @return
     * @see [相关类/方法](可选)
     * @since [产品/模块版本](可选)
     */
    List<StoreCateMonthSaleDto> queryStoreCateSalesInYear(String year, String storeCode, String cateCode);
    
    BiStoreYbMonthDto queryStoreYbSaleByCate(String month, String storeCode, String cateCode);
}
